package org.zjt.weather.demo;

import org.apache.hadoop.io.WritableComparable;
import org.apache.hadoop.io.WritableComparator;

/**
 * DESC   compare为0的，归为一个reduce方法的元素，compare为0的元素value放入values中。
 *
 * 进入同一个reduce的key是按照顺序排好的，该类使得：
 *      如果连续（注意，一定连续）的两条或多条记录满足同组（即compare方法返回0）的条件，
 *      即使key不相同，他们的value也会进入同一个values,执行一个reduce方法。
 *      相反，如果原来key相同，但是并不满足同组的条件，他们的value也不会进入一个valeus。
 *      最后返回的key是：满足这些条件的一组key中排在最后的那个。
 *
 *      @create 2017-05-23 下午2:16
 **/
public class WeatherGroup extends WritableComparator {

    // TODO: 2017/5/23  WeatherKey是中的key，WeatherGroup只对key操作。
    public WeatherGroup() {
        super(WeatherKey.class, true);
    }


    /**
     * 将相同年月的key数据归档到同一个reduce方法中。
     *
     *
     *      compare方法返回0，value放入values，流入同一个reduce方法中，作为参数。
     *
     * @param a
     * @param b
     * @return
     */
    @Override
    public int compare(WritableComparable a, WritableComparable b) {
        WeatherKey var1 = (WeatherKey) a;
        WeatherKey var2 = (WeatherKey) b;
        int var3 = Integer.compare(var1.getYear(), var2.getYear());
        if (var3 != 0)
            return var3;
        return Integer.compare(var1.getMonth(), var2.getMonth());
    }
}
